package com.example.excelxssfexport.controller;

import com.example.excelxssfexport.service.DataGenerationService;
import com.example.excelxssfexport.service.ExcelExportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

/**
 * 用户控制器类
 * 
 * 提供RESTful API接口，处理用户数据生成和Excel导出请求
 */
@RestController
@RequestMapping("/api/users")
public class UserController {
    
    /** 数据生成服务 */
    @Autowired
    private DataGenerationService dataGenerationService;
    
    /** Excel导出服务 */
    @Autowired
    private ExcelExportService excelExportService;
    
    /**
     * 生成指定数量的用户数据
     * 
     * @param count 需要生成的用户数量
     * @return 响应结果，包含成功或失败信息
     */
    @PostMapping("/generate/{count}")
    public ResponseEntity<String> generateUsers(@PathVariable int count) {
        try {
            dataGenerationService.generateUsers(count);
            return ResponseEntity.ok("成功生成 " + count + " 条用户数据");
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("生成用户数据失败: " + e.getMessage());
        }
    }
    
    /**
     * 导出所有用户数据为Excel文件
     * 
     * @return 响应结果，包含Excel文件数据或错误信息
     */
    @GetMapping("/export")
    public ResponseEntity<byte[]> exportUsers() {
        try {
            // 调用导出服务获取Excel数据
            ByteArrayOutputStream outputStream = excelExportService.exportUsersToExcel();
            byte[] excelBytes = outputStream.toByteArray();
            outputStream.close();
            
            // 设置HTTP响应头，控制浏览器如何处理响应内容
            HttpHeaders headers = new HttpHeaders();
            // 指定响应内容类型为二进制流，这样浏览器会提示下载而不是直接显示
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            // 设置内容处置为附件形式，指定默认文件名为users.xlsx
            // "attachment"表示以附件形式下载
            // "users.xlsx"是默认保存的文件名
            headers.setContentDispositionFormData("attachment", "users.xlsx");
            
            return new ResponseEntity<>(excelBytes, headers, HttpStatus.OK);
        } catch (IOException e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body(("导出Excel失败: " + e.getMessage()).getBytes());
        }
    }
}